home *** CD-ROM | disk | FTP | other *** search
-
- function units_antiaircraft_shieldUp(unit)
- local sound = unit:play3DSound("trans3.wav",1)
- unit:addAnimationToQueue(ENAT_IDLETIMEOUT1,1)
- while unit:getCurrentAnimation() ~= ENAT_IDLE do
- pause()
- end
- sound:destroy()
- sound = unit:play3DSound("antiair field shorter2.wav",1)
- unit:getBone(ENBT_FAN,0):addRotationEffect(ENET_EFFECT_ROTATE_RADAR,MATH_PI)
- unit:getBone(ENBT_TARGET,0):addSimpleEffect(ENET_EFFECT_GEOMETRY_AA_KUPOL)
- sound:destroy()
- end
-
- function units_antiaircraft_shieldDown(unit)
- local sound = unit:play3DSound("detrans3.wav",1)
- unit:addAnimationToQueue(ENAT_IDLETIMEOUT2,1)
- local shieldBone = unit:getBone(ENBT_FAN,0)
- shieldBone:killEffect(ENET_EFFECT_ROTATE_RADAR)
- shieldBone:addRotationEffect(ENET_EFFECT_ROTATE_GUNTOWERDEFAULT,MATH_PI)
- unit:getBone(ENBT_TARGET,0):killEffect(ENET_EFFECT_GEOMETRY_AA_KUPOL)
- sound:destroy()
- end
-
- function units_antiaircraft_setup_special()
- local unit = uniGetExecutor()
- unit:resetAnimations()
- local owner = uniGetTarget()
- if(owner) then
- unit:setTransformOwner(units_findfreefirespot(owner,1))
- unit:setLocalPosition(0,0,0)
- unit:setLocalOrientation(0,1,0,0,0,1)
- if(owner:getIsPlacesVisible() == false) then
- unit:setVisibility(false,false)
- end
- end
- if owner ~= nil then
- if owner:getIsPlacesVisible() then owner = nil end
- end
- if owner == nil then units_antiaircraft_shieldUp(unit) end
- units_setup(5,false,nil,ENET_EFFECT_GEOMETRY_AASHADOW,true,false)
- end
-
- function units_antiaircraft_setup()
- units_antiaircraft_setup_special()
- end
-
- function units_antiaircraft_resetup()
- units_antiaircraft_setup_special()
- end
-
- function units_antiaircraft_select()
- units_select(12,1)
- end
-
- function units_antiaircraft_unselect()
- units_unselect()
- end
-
- function units_antiaircraft_selectenemy()
- uniGetExecutor():addSimpleEffect(ENET_EFFECT_SELECTEDGEOMETRY_ENEMY)
- end
-
- function units_antiaircraft_damaged()
- uniGetExecutor():applyDamage(uniGetLife())
- end
-
- function units_antiaircraft_highlight()
- uniGetExecutor():addEffectWithRadius(ENET_EFFECT_GEOMETRY_HIGHLIGHT,15)
- end
-
- function units_antiaircraft_explode()
- units_explode_big1()
- uniGetExecutor():getBone(ENBT_TARGET,0):killEffect(ENET_EFFECT_GEOMETRY_AA_KUPOL)
- end
-
- function units_antiaircraft_fire()
- end
-
- function units_antiaircraft_move()
- local unit = uniGetExecutor()
- units_antiaircraft_shieldDown(unit)
- unit:addAnimationToQueue(ENAT_GO,MATH_INFINITY)
- while unit:getCurrentAnimation() ~= ENAT_GO do
- pause()
- end
- local sound = unit:play3DSound("aniair turn.wav",1)
-
- local steps = {}
- local i = 0;
- for i = 0,1 do
- steps[i] = unit:getBone(ENBT_STEPEMITTER,i):addSimpleEffect(ENET_EFFECT_DYNAMICGEOMETRY_LIGHTTANKSTEPSEMITTER)
- steps[i+2] = unit:getBone(ENBT_STEPEMITTER,i):addSimpleEffect(ENET_EFFECT_PS_NEWTRACKSMOKE)
- end
-
- waitDeath(unit:addRotationEffect(ENET_EFFECT_ROTATE_UNIT,MATH_PI * 0.45))
- sound:destroy()
- sound = unit:play3DSound("lighttank_alien_move.wav",1)
- waitDeath(unit:addMoveEffect(ENET_EFFECT_MOVE_LINEAR,80))
- unit:setCurrentAnimationRepeatCount(1)
- sound:destroy()
- units_antiaircraft_shieldUp(unit)
-
- for i = 0,1 do
- if(unit:getScale() < 1.0) then
- steps[i]:destroy()
- else
- steps[i]:setTransformOwner()
- steps[i]:suspendedDestroy(70)
- end
- steps[i+2]:suspendedDestroy(1.0)
- end
- end
-
- -- register functions to unit scriptset - they will be called when specified command arrives to unit
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_MOVE,"units_antiaircraft_move")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_FIRE1,"units_antiaircraft_fire")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_FIRE2,"units_antiaircraft_fire")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_SELECT,"units_antiaircraft_select")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_SELECTENEMY,"units_antiaircraft_selectenemy")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_UNSELECT,"units_antiaircraft_unselect")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_SETUP,"units_antiaircraft_setup")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_RESETUP,"units_antiaircraft_resetup")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_DAMAGED,"units_antiaircraft_damaged")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_EXPLODE,"units_antiaircraft_explode")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_HIGHLIGHT,"units_antiaircraft_highlight")
- registerCommand(ENSCRIPTSET_ANTIAIRCRAFT,ENC_INSIDE,"units_inside")
-
-
- -- make description of unit
- desc = getEffectDescriptionP(ENET_UNIT_ANTIAIRCRAFT)
- desc.ClassID = ENCLASS_MESHINSTANCE
- desc.EffectClassType = ENECT_GEOMETRY
- desc.FileName = "antiaircraft.rmd"
- desc.ScriptSet = ENSCRIPTSET_ANTIAIRCRAFT
- desc.MoveType = ENMOVE_GROUNDORIENTED
- desc.RenderType = ENRENDERTYPE_GEOMETRY
- desc.Material = ENMAT_RIGIDSKINNEDMESH
- desc.MaterialColors = units_materialcolors_human
-
- -- shadow
- desc = getEffectDescriptionP(ENET_EFFECT_GEOMETRY_AASHADOW)
- desc.ClassID = ENCLASS_MESHINSTANCE
- desc.EffectClassType = ENECT_GEOMETRY
- desc.FileName = "antiaircraft_shadow.rmd"
- desc.RenderType = ENRENDERTYPE_SHADOW
- desc.Material = ENMAT_SHADOW
- desc.MaterialColors = units_materialcolors_shadow
-
-
- -- register new unit to logic
- unitDesc = logic_getUnitDescP(30)
- unitDesc.group = 2
- unitDesc.order = 5
- unitDesc.unit_res_id = ENET_UNIT_ANTIAIRCRAFT
- unitDesc.unit_icon_id = "Antiair_h_small_normal.dds"
- unitDesc.active_id = "Antiair_h_small_active.dds"
- unitDesc.pressed_id = "Antiair_h_small_pressed.dds"
- unitDesc.big_icon_id = "Antiair_h_big_normal.dds"
- unitDesc.small_icon_id = "Antiair_u_stats.dds"
- unitDesc.HP = 4
- unitDesc.MP = 10
- unitDesc.WR = 1
- unitDesc.min_WR = 0
- unitDesc.WD = 0
- unitDesc.WR2 = 0
- unitDesc.min_WR2 = 0
- unitDesc.WD2 = 0
- unitDesc.ability = 0
- unitDesc.transport = 0
- unitDesc.value = 3
- unitDesc.race = 0
- unitDesc.fire_pause = 0.6
- unitDesc.move_pause = 0.5
- unitDesc.unit_info_scale = 0.07
- unitDesc.scn_name = "ANTIAIR"
-